//
//  OrdineDVStaticViewController.m
//  iTeVe
//
//  Created by Pedro Gonzalez on 26/02/14.
//  Copyright (c) 2014 SISI Software. All rights reserved.
//

#import "OrdineDVStaticViewController.h"
#import "FMDBDataAccess.h"


@interface OrdineDVStaticViewController () <UITextViewDelegate, UITextFieldDelegate, BSKeyboardControlsDelegate, UIPickerViewDelegate, UIPickerViewDataSource>

@property (nonatomic, strong) BSKeyboardControls *keyboardControls;

@end

@implementation OrdineDVStaticViewController{
    
    UIPopoverController *sceltaClientePopover;
    UIDatePicker *datePicker;
    NSNumberFormatter *numberFormatter;
    NSNumberFormatter *numberFormatter3;
    NSLocale *locale;
    NSString *separatore;

}

@synthesize btnAnnulla;
@synthesize btnConferma;


@synthesize modelTesta;
//@synthesize modelCliente;
//@synthesize modelDettaglio;

@synthesize lblRagioneSociale, lblIndirizzo, lblTelefonoFaxCell, lblSconti, lblListino, lblDataDocumento, lblNoteCliente, lblNoteDocumento, lblPagamento, lblPivaCF, lblTotaleDocumento;

@synthesize tfRagioneSociale, tfIndirizzo, tfCap, tfCitta, tfProvincia, tfNazione, tfTelefono, tfFax, tfCellulare, tfSc1, tfSc2, tfSc3, tfSc4, tfListino, tfDataDocumento, tfAgente, tfPagamento, tfPivaCF, tfTotaleDocumento, tvNoteCliente, tvNoteDocumento, tfCodMovimento, tfMovimento;

@synthesize activeField;

@synthesize nuovo;

@synthesize accessoryView;

@synthesize btnScegliecliente;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setLenient:YES];
    [numberFormatter setNegativeFormat:@"(0.00)"];
    [numberFormatter setPositiveFormat:@"0.00"];
    
    numberFormatter3 = [[NSNumberFormatter alloc] init];
    [numberFormatter3 setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter3 setLenient:YES];
    [numberFormatter3 setNegativeFormat:@"(0.000)"];
    [numberFormatter3 setPositiveFormat:@"0.000"];
    
    locale = [NSLocale currentLocale];
    separatore = [locale objectForKey: NSLocaleDecimalSeparator];

    FMDBDataAccess *db = [[FMDBDataAccess alloc] init];
    tipimov = [db getTipiMovTV];
    
    nuovo = [modelTesta.nuovo boolValue];
    if (nuovo){
        
//        modelDettaglio = [[NSMutableArray alloc] init];
        modelTesta.righeDocumento = [[NSMutableArray alloc] init];
        
    } else {
        /*
        NSMutableArray *righe = [[NSMutableArray alloc] init];
        
        FMDBDataAccess *db = [[FMDBDataAccess alloc] init];
        
        righe = [db getDettaglio:modelTesta.id];
        modelDettaglio = modelTesta.righeDocumento;
         */
    }
    
    [self viewDatiTipoMovimento:modelTesta.codtipmov];
    
    tfRagioneSociale.delegate = self;
    tfIndirizzo.delegate = self;
    tfTelefono.delegate = self;
    tfCodMovimento.delegate = self;
    
    [self viewDatiCliente:modelTesta.datiCliente];
    
    datePicker = [[UIDatePicker alloc] init];
    datePicker.datePickerMode = UIDatePickerModeDate;
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    if (nuovo){
        tfDataDocumento.text = [formatter stringFromDate:[NSDate date]];
        datePicker.date = [NSDate date];
    } else {
        tfDataDocumento.text = [formatter stringFromDate:modelTesta.dataora];
        datePicker.date = modelTesta.dataora;
    }
    

    // picker
    tfDataDocumento.inputView = datePicker;
    tfDataDocumento.inputAccessoryView = self.accessoryView;
    //
    tfCodMovimento.inputView = self.documentiPicker;
    tfCodMovimento.inputAccessoryView = self.accessoryView;
        
    
    tfRagioneSociale.enabled = NO;
    tfIndirizzo.enabled = NO;
    tfTelefono.enabled = NO;
    tfPivaCF.enabled = NO;
    tfPagamento.enabled = NO;
    tfTotaleDocumento.enabled = NO;
    
    tvNoteDocumento.text = modelTesta.nota;
    
    tfTotaleDocumento.text = [numberFormatter stringFromNumber:modelTesta.totaleivato];
    
    // controllo tastiera next/previous
    
    /*
    NSArray *fields = @[ tfRagioneSociale, tfIndirizzo, tfCap, tfCitta, tfProvincia, tfNazione, tfTelefono,
                         tfFax, tfCellulare, tfSc1, tfSc2, tfSc3, tfSc4,
                         tfListino];
    
    [self setKeyboardControls:[[BSKeyboardControls alloc] initWithFields:fields]];
    [self.keyboardControls setDelegate:self];
     */
    
    
    btnAnnulla.title = NSLocalizedString(@"TESTO_ANNULLA", @"Annulla...");
    btnConferma.title = NSLocalizedString(@"TESTO_CONFERMA", @"Conferma...");
    
//    self.lblRagioneSociale.text = NSLocalizedString(@"CLIENTI_LABEL_RAGIONESOCIALE", nil);
//    self.btnScegliecliente.titleLabel = NSLocalizedString(@"CLIENTI_LABEL_RAGIONESOCIALE", nil);
    [self.btnScegliecliente setTitle:NSLocalizedString(@"CLIENTI_LABEL_RAGIONESOCIALE", nil) forState:UIControlStateNormal ];
    self.lblIndirizzo.text  = NSLocalizedString(@"CLIENTI_LABEL_INDIRIZZO", nil);
    self.lblTelefonoFaxCell.text = NSLocalizedString(@"CLIENTI_LABEL_TELEFONOFAXCELL", nil);
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    
}

- (void)keyboardControlsDonePressed:(BSKeyboardControls *)keyboardControls
{
    [keyboardControls.activeField resignFirstResponder];
}

- (void)keyboardControls:(BSKeyboardControls *)keyboardControls selectedField:(UIView *)field inDirection:(BSKeyboardControlsDirection)direction
{
    UIView *view = keyboardControls.activeField.superview.superview;
    [self.tableView scrollRectToVisible:view.frame animated:YES];
}


- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self.keyboardControls setActiveField:textField];
}

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    [self.keyboardControls setActiveField:textView];
}


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    
    
    if(textField==tfCodMovimento && tfCodMovimento.text.length>0){
        int index = -1;
        for (int i=0; i<tipimov.count; i++) {
            Tipimov* tm = tipimov[i];
            if ([tm.codmov isEqualToString:tfCodMovimento.text]){
                index = i;
                break;
            }
        }
        if (index!=-1){
            [documentiPicker reloadAllComponents];
            [documentiPicker selectRow:index inComponent:0 animated:NO];
        }
        
    }
    return YES;
}

- (IBAction)cancel:(id)sender
{
    [self.delegate ordineDVStaticViewControllerDidCancel:self];
}


- (IBAction)done:(id)sender
{
    
    // controlli
    if (tfRagioneSociale.text.length==0){
        NSString *msg = @"La Ragione Sociale non deve essere vuota...";
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Informazione"
                                                        message:msg
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return;
    }

    
    if (modelTesta.righeDocumento.count==0){
        NSString *msg = @"Documento senza righe...";
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Informazione"
                                                        message:msg
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return;
    }

    
    if (tfCodMovimento.text.length==0 &&tfMovimento.text.length==0){
        NSString *msg = @"Indicare tipo Documento...";
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Informazione"
                                                        message:msg
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        return;
    }

    /*
    Testa *ordine = [[Testa alloc] init];
    
    Cliente *cliente = [[Cliente alloc] init];
    
    cliente.idcliente = modelTesta.datiCliente.idcliente;
    cliente.codice = modelTesta.datiCliente.codice;
    cliente.ragionesociale = tfRagioneSociale.text;
    cliente.indirizzo = tfIndirizzo.text;
    cliente.cap = tfCap.text;
    cliente.citta = tfCitta.text;
    cliente.provincia = tfProvincia.text;
    cliente.nazione = tfNazione.text;
    cliente.telefono = tfTelefono.text;
    cliente.fax = tfFax.text;
    cliente.cellulare = tfCellulare.text;
    
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    [f setLenient:YES];
    
    NSNumber * sc1 = [f numberFromString:tfSc1.text];
    NSNumber * sc2 = [f numberFromString:tfSc2.text];
    NSNumber * sc3 = [f numberFromString:tfSc3.text];
    NSNumber * sc4 = [f numberFromString:tfSc4.text];
    cliente.sc1 = sc1;
    cliente.sc2 = sc2;
    cliente.sc3 = sc3;
    cliente.sc4 = sc4;
    
    cliente.codlistino = tfListino.text;
    
    
    NSString *dateString = tfDataDocumento.text;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd/MM/yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];
    
    ordine.dataora = dateFromString;
    ordine.codcli = (cliente.codice==nil?@"":cliente.codice);
    ordine.coddep = @"00001";
    ordine.codtipmov = @"TV1";
    ordine.imponibile = [NSNumber numberWithDouble:10];
    ordine.iva = [NSNumber numberWithDouble:2.2];
    ordine.totaleivato = [NSNumber numberWithDouble:12.2];
    ordine.chiuso = NO;
    ordine.nota = @"Testo di nota per l'ordine";
    ordine.idcliente = cliente.idcliente;
    
    ordine.datiCliente = cliente;
     */

    NSString *dateString = tfDataDocumento.text;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd/MM/yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];
    modelTesta.dataora = dateFromString;
    
    modelTesta.nota = tvNoteDocumento.text;
    modelTesta.datiCliente.nota = tvNoteCliente.text;
    
    [self calcoloTotali];
    
    modelTesta.codtipmov = tfCodMovimento.text;
    
    if (nuovo){
        
        // per adesso, per non farli dare errore
        modelTesta.coddep = @"00002";
        modelTesta.chiuso = NO;
        
        [self.delegate ordineDVStaticViewController:self didAddOrdine:modelTesta];
    } else {
        
        [self.delegate ordineDVStaticViewController:self didEditOrdine:modelTesta];
    }
    
    
}

-(void)calcoloTotali
{
    double imponibile=0, iva=0, totale=0;
    for (int i=0; i<modelTesta.righeDocumento.count; i++) {
        RigaDettaglio* riga = modelTesta.righeDocumento[i];
        imponibile = imponibile + [riga.totimponibile doubleValue];
        iva = iva + [riga.totiva doubleValue];
        totale = totale + [riga.totaleivato doubleValue];
    }
    modelTesta.imponibile = [NSNumber numberWithDouble:imponibile];
    modelTesta.iva = [NSNumber numberWithDouble:iva];
    modelTesta.totaleivato = [NSNumber numberWithDouble:totale];
    
    tfTotaleDocumento.text = [numberFormatter stringFromNumber:modelTesta.totaleivato];
    

}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

    /*
    if (textField == self.tfSc1 || textField == self.tfSc2 || textField == self.tfSc3 || textField == self.tfSc4)
    {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        
        NSLocale* locale = [NSLocale currentLocale];
        NSString *separatore = [locale objectForKey: NSLocaleDecimalSeparator];
        
        NSString *expression = [NSString stringWithFormat:@"%@%@%@", @"^([0-9]+)?(\\", separatore, @"([0-9]{1,2})?)?$"];
        
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                               options:NSRegularExpressionCaseInsensitive
                                                                                 error:nil];
        NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                            options:0
                                                              range:NSMakeRange(0, [newString length])];
        if (numberOfMatches == 0)
            return NO;
    }
    */
     
    return YES;
}


- (IBAction)selezionaPagamento:(id)sender {
    // seleziono pagamento
    NSLog(@"Seleziono Pagamento");
}



-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"sceltaClienteSegue"] || [segue.identifier isEqualToString:@"sceltaClienteSegue2"]  ){
        sceltaClientePopover = [(UIStoryboardPopoverSegue *)segue popoverController];
        sceltaClientePopover.delegate = (id <UIPopoverControllerDelegate>)self;
        ClientiScegliVC *controller = (ClientiScegliVC *)segue.destinationViewController;
        controller.delegate = self;
        controller.isScelgoCliente = YES;
    } else if ([segue.identifier isEqualToString:@"segueViewRigheOrdine"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        OrdineRigheVC *destViewController = [navigationController viewControllers][0];
        destViewController.modelTesta = modelTesta;
        //destViewController.modelCliente = modelCliente;
        //destViewController.modelDettaglio = modelDettaglio;
        destViewController.delegate = self;
        
    }
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if (sceltaClientePopover){
        [sceltaClientePopover dismissPopoverAnimated:YES];
        sceltaClientePopover = nil;
        return NO;
    } else {
        return YES;
    }
}



- (void)selectItemViewController:(ClientiScegliVC *)controller didFinishEnteringItem:(Cliente *)cliente
{

//    modelCliente = cliente;
    [self viewDatiCliente:cliente];
    
    modelTesta.datiCliente = cliente;
    modelTesta.idcliente = cliente.idcliente;
    modelTesta.codcli = cliente.codice;
    modelTesta.codcli = (modelTesta.codcli==nil?@"":modelTesta.codcli);
    
    [sceltaClientePopover dismissPopoverAnimated:YES];    
    sceltaClientePopover = nil;
    
}

-(void) viewDatiCliente:(Cliente *)cliente
{
    
    FMDBDataAccess *db = [[FMDBDataAccess alloc] init];
    
    if (cliente.ragionesociale.length==0){
        tfRagioneSociale.text = @"";
        tfTelefono.text = @"";
        tfIndirizzo.text = @"";
        tfPivaCF.text = @"";
        tfPagamento.text = @"";
        tvNoteCliente.text = @"";
        return;
    }
    
    tfRagioneSociale.text = cliente.ragionesociale;
    
    NSString* telefono = [NSString stringWithFormat:@"%@ - %@ - %@", cliente.telefono, cliente.fax, cliente.cellulare];
    tfTelefono.text = telefono;
    
    NSString* indirizzo = [NSString stringWithFormat:@"%@ - %@ - %@ - %@ - %@", cliente.indirizzo, cliente.cap, cliente.citta, cliente.provincia, cliente.nazione];
    tfIndirizzo.text = indirizzo;
    
    NSString* pIvaCF = [NSString stringWithFormat:@"%@ - %@", cliente.partitaiva, cliente.codicefiscale];
    tfPivaCF.text = pIvaCF;

    
    Pagamento *condpagamento = [db getCondizionePagamentoxCodice:cliente.codpagamento];
    NSString* pagamento = [NSString stringWithFormat:@"%@ - %@", cliente.codpagamento, condpagamento.descrizione];
    tfPagamento.text = pagamento;
    
    tvNoteCliente.text = cliente.nota;
    

}

- (UIToolbar *)accessoryView {
    if ( accessoryView == nil ) {
        accessoryView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        
        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                                                    target:self
                                                                                    action:@selector(doneButton)];
        
        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]  initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                       target:self
                                                                                       action:@selector(cancelButton)];
        
        doneButton.title = NSLocalizedString(@"TESTO_CONFERMA", @"Conferma...");
        cancelButton.title = NSLocalizedString(@"TESTO_ANNULLA", @"Annulla...");
        
        [accessoryView setItems:[NSArray arrayWithObjects:cancelButton, doneButton, nil]];
    }
    
    return accessoryView;
}

- (void)doneButton {
    
    if ( [tfDataDocumento isFirstResponder] ) {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"dd/MM/yyyy"];
        tfDataDocumento.text = [formatter stringFromDate:[datePicker date]];
        [tfDataDocumento resignFirstResponder];
    } else if ( [tfCodMovimento isFirstResponder] ) {
        NSInteger row = [self.documentiPicker selectedRowInComponent:0];
        Tipimov *tipomov = tipimov[row];
        [self viewDatiTipoMovimento:tipomov.codmov];
        [tfCodMovimento resignFirstResponder];
    }
}

-(void)viewDatiTipoMovimento :(NSString *)codmov
{
    
    if (codmov.length==0) {
        return;
    }
    
    FMDBDataAccess *db = [[FMDBDataAccess alloc] init];
    Tipimov *tipomov = [[Tipimov alloc] init];
    tipomov = [db getTipiMovxCodice:codmov];
    tfCodMovimento.text = tipomov.codmov;
    tfMovimento.text = tipomov.descrizione;
    
}

- (void)cancelButton {
    //
    if ( [tfDataDocumento isFirstResponder] ) {
        [tfDataDocumento resignFirstResponder];
    } else  if ( [tfCodMovimento isFirstResponder] ) {
        [tfCodMovimento resignFirstResponder];
    }

    
}


// RIGHE DETTAGLIO

-(void) ordineRigheVCDidCancel:(OrdineRigheVC *)controller
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

-(void) ordineRigheVC:(OrdineRigheVC *)controller didViewRighe:(NSMutableArray *)righeDettaglio
{
    
//    modelDettaglio = righeDettaglio;
    modelTesta.righeDocumento = righeDettaglio;
    [self calcoloTotali];
    
    [self.tableView reloadData];
    
    [self dismissViewControllerAnimated:YES completion:nil];
}


// pickerview

- (UIPickerView *)documentiPicker {
    if ( documentiPicker == nil ) {
        documentiPicker = [[UIPickerView alloc] init];
        documentiPicker.delegate = self;
        documentiPicker.dataSource = self;
        documentiPicker.showsSelectionIndicator = YES;
        [documentiPicker reloadAllComponents];
    }
    
    return documentiPicker;
}



- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    
    NSString *descrizione = @"";
    if ( [pickerView isEqual:documentiPicker] ||  [tfCodMovimento isFirstResponder]  ) {
        
        Tipimov *tipomov = tipimov[row];
        descrizione = [NSString stringWithFormat:@"%@ - %@", tipomov.codmov, tipomov.descrizione];
        
    } else if ([pickerView isEqual:datePicker] ||   [tfDataDocumento isFirstResponder] ) {
        
        //Deposito *deposito = depositi[row];
        //descrizione = [NSString stringWithFormat:@"%@ - %@", deposito.coddep, deposito.descrizione];
        

        
    }
    return descrizione;
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    long quanti = 0;
    
    if ( [pickerView isEqual:documentiPicker] ||  [tfCodMovimento isFirstResponder]  ) {
        
        quanti = [tipimov count];
        
    } else if ([pickerView isEqual:datePicker] ||   [tfDataDocumento isFirstResponder] ) {
        
        //quanti = [depositi count];
        
    }
    
    return quanti;
}


@end
